# -*- coding: utf-8 -*-
"""
创建PostgreSQL数据库
"""

import sys
from pathlib import Path

# 将项目根目录添加到路径
project_root = Path(__file__).resolve().parent
sys.path.insert(0, str(project_root))

def create_database():
    """创建QA_knowledge数据库"""
    import psycopg2
    from psycopg2 import sql
    
    # 连接到默认的postgres数据库来创建新数据库
    default_config = {
        'host': 'localhost',
        'port': 5432,
        'database': 'postgres',  # 使用默认的postgres数据库
        'user': 'postgres',
        'password': '123456',
        'client_encoding': 'UTF8'
    }
    
    print("=" * 60)
    print("创建QA_knowledge数据库")
    print("=" * 60)
    
    try:
        # 设置环境编码
        import os
        os.environ['PGCLIENTENCODING'] = 'UTF8'
        
        print("\n步骤1: 连接到PostgreSQL服务器...")
        # 连接时设置autocommit，因为CREATE DATABASE不能在事务中执行
        conn = psycopg2.connect(**default_config)
        conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
        print("✓ 连接成功")
        
        cursor = conn.cursor()
        
        # 检查数据库是否已存在
        print("\n步骤2: 检查数据库是否存在...")
        cursor.execute(
            "SELECT 1 FROM pg_database WHERE datname = 'QA_knowledge'"
        )
        exists = cursor.fetchone()
        
        if exists:
            print("✓ 数据库 QA_knowledge 已存在")
        else:
            print("数据库不存在，正在创建...")
            
            # 创建数据库
            cursor.execute(
                sql.SQL("CREATE DATABASE {} ENCODING 'UTF8'").format(
                    sql.Identifier('QA_knowledge')
                )
            )
            print("✓ 数据库 QA_knowledge 创建成功")
        
        cursor.close()
        conn.close()
        
        print("\n" + "=" * 60)
        print("✓ 数据库准备完成！")
        print("=" * 60)
        print("数据库名称: QA_knowledge")
        print("编码: UTF8")
        print("\n现在可以运行: python setup_db_and_import.py")
        
        return True
        
    except Exception as e:
        print(f"\n✗ 创建数据库失败: {e}")
        print("\n可能的原因:")
        print("1. PostgreSQL服务未启动")
        print("2. 用户名或密码不正确")
        print("3. 权限不足")
        print("\n请检查 D_db/core/config.py 中的数据库配置")
        return False

def main():
    try:
        import psycopg2
    except ImportError:
        print("错误: 未安装 psycopg2")
        print("请运行: pip install psycopg2-binary")
        return
    
    success = create_database()
    
    if success:
        print("\n是否继续导入数据？")
        print("1. 是 - 自动运行 setup_db_and_import.py")
        print("2. 否 - 稍后手动运行")
        
        choice = input("\n请选择 (1/2): ").strip()
        
        if choice == "1":
            print("\n正在运行数据导入脚本...")
            print("=" * 60)
            
            # 导入并运行setup_db_and_import模块
            import setup_db_and_import
            setup_db_and_import.main()

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n程序被用户中断")
    except Exception as e:
        print(f"\n程序执行出错: {e}")
        import traceback
        traceback.print_exc()

